package com.jiawa.wiki.controller;

import com.jiawa.wiki.req.EbookQueryReq;
import com.jiawa.wiki.req.EbookSaveReq;
import com.jiawa.wiki.resp.CommonResp;
import com.jiawa.wiki.resp.EbookQueryResp;
import com.jiawa.wiki.resp.PageResp;
import com.jiawa.wiki.service.EbookService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

/*
@RestController 是 @Controller 和 @ResponseBody 两个注解的结合体。
 */
@RestController
@RequestMapping("/ebook")
public class EbookController {
    @Resource
    private EbookService ebookService;

    /**
     *@Valid 校验才能生成
     */
    @GetMapping("/list")
    public CommonResp List(@Valid EbookQueryReq req){
        CommonResp< PageResp<EbookQueryResp>> resp = new CommonResp<>();
       PageResp<EbookQueryResp> list = ebookService.List(req);
        resp.setContent(list);
        return resp;
    }

    /**
     * @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)；
     * 而最常用的使用请求体传参的无疑是POST请求了，所以使用@RequestBody接收数据时，
     *   一般都用POST方式进行提交。在后端的同一个接收方法里，@RequestBody与@RequestParam()可以同时使用
     *  @RequestBody最多只能有一个，而@RequestParam()可以有多个。
     *  RequestBody 接收的是请求体里面的数据；而RequestParam接收的是key-value里面的参数
     */

    @PostMapping("/save")
    public CommonResp save( @Valid @RequestBody EbookSaveReq req){
        CommonResp resp = new CommonResp<>();
            ebookService.save(req);
            return resp;
    }

    /**
     * @PathVariable 映射 URL 绑定的占位符
     * 通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过
     */
    @DeleteMapping("/delete/{id}")
    public  CommonResp delete( @PathVariable Long id){
        CommonResp resp = new CommonResp<>();
        ebookService.delete(id);
        return resp;
    }
    @GetMapping("/all")
    public CommonResp all(){
        CommonResp commonResp = new CommonResp();
        List<EbookQueryResp> ebookQueryRespList = ebookService.all();
        commonResp.setContent(ebookQueryRespList);
        return commonResp;
    }

}
